home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-03-01 | 24.1 KB | 1,021 lines |
- Here is the code of a fighting type game I was making. It illustrates some
- interesting techniches, like AMAL BOBs animated with data banks and
- BOB grabs from Anim5's. It won't run without the graphics though, but I
- suppose you could make some. Have Fun!
-
- Goto HELL
- Procedure INIT_CRAP
- SPIN_KICK=69
- HIGH_KICK=16
- MID_KICK=32
- LOW_KICK=49
- HIGH_PUNCH=17
- MID_PUNCH=33
- LOW_PUNCH=50
- BOW=53
- WALKING_LEFT=79
- WALKING_LEFT_2=179
- WALKING_RIGHT=78
- WALKING_RIGHT_2=178
- HURT=100
- STANDING=101
- SHUFFLE_LEFT=102
- SHUFFLE_RIGHT=103
- ABORT_WALK_LEFT=104
- ABORT_WALK_RIGHT=105
- DEAD=106
- STILL_WALKING_RIGHT=57
- STILL_WALKING_LEFT=56
- WALK_PUNCH_HIGH=18
- WALK_PUNCH_MID=34
- WALK_PUNCH_LOW=51
- WALK_KICK_HIGH=19
- WALK_KICK_MID=35
- WALK_KICK_LOW=52
- FOOT_SWEEP=111
- BLOCK=68
- JUMP=666
- End Proc
- Procedure INIT_ENEMYPAT
- ' Bell
- For A=1 To 5
- For B=1 To 5
- Read A$
- PATTERN$(A,B)=A$
- ' Print PATTERN$(A,B)
- Next B
- Next A
- Data "kh","sr","km","sl","ee"
- Data "kl","sl","ph","pm","ee"
- Data "km","kh","ks","sr","ee"
- Data "sr","sr","sr","sr","ee"
- Data "ks","sl","kl","ph","ee"
- A=0 : B=0
- End Proc
- Procedure INIT
- Close Editor
- ' Multi No
- Screen Open 2,320,200,64,Lowres
- Screen Display 2,128,42,,
- Curs Off : Cls 0 : Flash Off
- F$="wolfpics:"
- Screen Open 0,350,232,64,Lowres
- Screen Display 0,128,42,,
- ' Load F$+"karateka.abk"
- Get Icon Palette
- Flash Off : Curs Off
- ' Scene Load F$+"karateka.Scene",6
- Scene Bank 6
- Scene 16 View 0,0,0 To 320,232
- Scene 16 Do X,Y
- Double Buffer
- Bob Update Off
- Update Off
- Flash Off
- Curs Off
- Hide On
- Autoback 0
- Paper 17
- X_OFFSET=0
- Y_OFFSET=0
- Screen Open 1,320,60,8,Lowres
- Screen Display 1,,200,,60
- Curs Off : Cls 0 : Flash Off
- Screen 2
- Get Icon Palette
- Screen 0
- Key Speed 10,10
- Reserve As Work 20,100
- Reserve As Work 1001,2000
- Reserve As Work 1002,2000
- Poke Start(1001),0
- Poke Start(1002),0
- S=Start(20)
- COUNT=0
- INIT_MEN
- INIT_CRAP
- INIT_POSITIONS
- INIT_ENEMYPAT
- INIT_MOVES
- INIT_STATUS
- INIT_SOUNDS
- End Proc
- Procedure INIT_MEN
- F$="wolfpics:"
- ' Load F$+"DetectMoves.Abk"
- ' Bank Swap 1,8
- ' Load F$+"KarateMoves3.Abk"
- IMAGE=28
- X(1)=200 : Y(1)=100
- X(2)=100 : Y(2)=100
- Bob 1,X(1),Y(1),Hrev(IMAGE)
- Bob 2,X(2),Y(2),IMAGE
- STAND=False
- LIVES1=1
- LIVES2=1
- For T=1 To 56
- Hot Spot T,$11
- Next T
- ENEMY=1
- HERO=2
- Proc STATS
- ENEMY_HIT_X=1000
- ENEMY_HIT_Y=1000
- HERO_HIT_X=1000
- HERO_HIT_Y=1000
- End Proc
- Procedure INIT_POSITIONS
- For P=1 To 5
- Read L$
- LOCATION$(P)=L$
- Next P
- Data "Head/Neck","Torso","Arms/Hands","Groin","Legs/Feet"
- End Proc
- Procedure INIT_MOVES
-
- SPEED=12
- WALK_SPEED=5
- WALK_DIST=25
-
- 'SPIN_KICK:
- Reserve As Work SPIN_KICK,56
- S=Start(SPIN_KICK)
- Loke S,6
- For T=4 To(13*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 17,-18,-17,-18,3,6,SPEED
- Data 4,5,6,7,8,9
- 'HIGH_KICK:
- Reserve As Work HIGH_KICK,44
- S=Start(HIGH_KICK)
- Loke S,3
- For T=4 To(10*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 14,-10,-14,-10,1,11,SPEED
- Data 10,11,14
- 'MID_KICK:
- Reserve As Work MID_KICK,44
- S=Start(MID_KICK)
- Loke S,3
- For T=4 To(10*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 16,0,-16,0,1,12,SPEED
- Data 10,12,14
- 'LOW_KICK:
- Reserve As Work LOW_KICK,44
- S=Start(LOW_KICK)
- Loke S,3
- For T=4 To(10*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 8,14,-8,14,1,11,SPEED
- Data 10,13,14
- 'HIGH_PUNCH:
- Reserve As Work HIGH_PUNCH,48
- S=Start(HIGH_PUNCH)
- Loke S,4
- For T=4 To(11*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 14,-15,-14,-15,1,21,SPEED
- Data 20,21,22,23
- 'MID_PUNCH:
- Reserve As Work MID_PUNCH,52
- S=Start(MID_PUNCH)
- Loke S,5
- For T=4 To(12*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 15,-5,-15,-5,1,16,SPEED
- Data 15,16,17,18,19
- 'LOW_PUNCH:
- Reserve As Work LOW_PUNCH,48
- S=Start(LOW_PUNCH)
- Loke S,4
- For T=4 To(11*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 12,0,-12,0,1,25,SPEED
- Data 24,25,26,27
- 'STANDING:
- Reserve As Work STANDING,36
- S=Start(STANDING)
- Loke S,1
- For T=4 To(8*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,255,255,1
- Data 28
- 'HURT:
- Reserve As Work HURT,36
- S=Start(HURT)
- Loke S,1
- For T=4 To(8*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,255,38,20
- Data 38
- 'BOW:
- Reserve As Work BOW,52
- S=Start(BOW)
- Loke S,5
- For T=4 To(12*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,3,0,SPEED
- Data 1,2,3,2,1
- ' Walking Left 1
- Reserve As Work WALKING_LEFT,60
- S=Start(WALKING_LEFT)
- Loke S,3
- For T=4 To(14*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,WALK_SPEED
- Data 34,56,33
- Data -10,10,-10,10
- ' Walking Left 2
- Reserve As Work WALKING_LEFT_2,64
- S=Start(WALKING_LEFT_2)
- Loke S,4
- For T=4 To(15*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,WALK_SPEED
- Data 32,31,30,29
- Data -15,15,-15,15
- ' Walking Right 1
- Reserve As Work WALKING_RIGHT,60
- S=Start(WALKING_RIGHT)
- Loke S,3
- For T=4 To(14*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,WALK_SPEED
- Data 29,30,31
- Data 10,10,10,10
- ' Walking Right 2
- Reserve As Work WALKING_RIGHT_2,64
- S=Start(WALKING_RIGHT_2)
- Loke S,4
- For T=4 To(15*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,WALK_SPEED
- Data 32,33,56,34
- Data 15,15,15,15
- ' Shuffle Left
- Reserve As Work SHUFFLE_LEFT,60
- S=Start(SHUFFLE_LEFT)
- Loke S,3
- For T=4 To(14*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,SPEED
- Data 36,37,36
- Data -8,8,-8,8
- ' Shuffle Right
- Reserve As Work SHUFFLE_RIGHT,60
- S=Start(SHUFFLE_RIGHT)
- Loke S,3
- For T=4 To(14*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,SPEED
- Data 36,37,36
- Data 8,8,8,8
- 'Abort Walk Left
- Reserve As Work ABORT_WALK_LEFT,60
- S=Start(ABORT_WALK_LEFT)
- Loke S,3
- For T=4 To(14*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,SPEED
- Data 29,30,31
- Data -10,10,-10,10
- 'Abort Walk Right
- Reserve As Work ABORT_WALK_RIGHT,60
- S=Start(ABORT_WALK_RIGHT)
- Loke S,3
- For T=4 To(14*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,SPEED
- Data 31,30,29
- Data 10,10,10,10
- 'Dead
- Reserve As Work DEAD,52
- S=Start(DEAD)
- Loke S,5
- For T=4 To(12*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,255,0,SPEED
- Data 38,39,40,41,42
- ' Still Walking Left
- Reserve As Work STILL_WALKING_LEFT,76
- S=Start(STILL_WALKING_LEFT)
- Loke S,7
- For T=4 To(18*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,WALK_SPEED
- Data 35,34,56,33,32,31,30
- Data -30,30,30,30
- ' Still Walking Right
- Reserve As Work STILL_WALKING_RIGHT,76
- S=Start(STILL_WALKING_RIGHT)
- Loke S,7
- For T=4 To(18*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,0,0,WALK_SPEED
- Data 30,31,32,33,56,34,35
- Data 30,30,-30,30
- 'Walk Punch High
- Reserve As Work WALK_PUNCH_HIGH,76
- S=Start(WALK_PUNCH_HIGH)
- Loke S,7
- For T=4 To(18*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 14,-15,-14,-15,0,16,SPEED
- Data 29,30,31,44,45,46,47
- Data 15,15,-15,15
- 'Walk Punch Mid
- Reserve As Work WALK_PUNCH_MID,76
- S=Start(WALK_PUNCH_MID)
- Loke S,7
- For T=4 To(18*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 12,-5,-12,-5,0,16,SPEED
- Data 29,30,31,50,51,52,47
- Data 15,15,-15,15
- 'Walk Punch Low
- Reserve As Work WALK_PUNCH_LOW,76
- S=Start(WALK_PUNCH_LOW)
- Loke S,7
- For T=4 To(18*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 11,1,-11,1,0,16,SPEED
- Data 29,30,31,53,54,55,47
- Data 15,15,-15,15
- 'Walk Kick High
- Reserve As Work WALK_KICK_HIGH,68
- S=Start(WALK_KICK_HIGH)
- Loke S,5
- For T=4 To(16*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 14,-10,-14,-10,0,12,SPEED
- Data 29,30,31,14,11
- Data 15,15,-15,15
- 'Block
- 'Walk Kick Mid
- Reserve As Work WALK_KICK_MID,68
- S=Start(WALK_KICK_MID)
- Loke S,5
- For T=4 To(16*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 16,0,-16,0,0,12,SPEED
- Data 29,30,31,14,12
- Data 15,15,-15,15
- 'Block
- 'Walk Kick Low
- Reserve As Work WALK_KICK_LOW,68
- S=Start(WALK_KICK_LOW)
- Loke S,5
- For T=4 To(16*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 8,14,-8,14,0,12,SPEED
- Data 29,30,31,14,13
- Data 15,15,-15,15
- 'Block
- Reserve As Work BLOCK,36
- S=Start(BLOCK)
- Loke S,1
- For T=4 To(8*4) Step 4
- Read DAT
- Loke S+T,DAT
- Next T
- Data 1000,1000,1000,1000,1,46,SPEED
- Data 46
-
- ' form of banks is
- ' 0 anim length
- ' 1,2 hero hit x,y or if walking the hero direction & distance
- ' 3,4 enemy hit x,y or if walking the enemy direction & distance
- ' 5 move counter
- ' 6 detect frame
- ' 7 anim speed
- ' 8 to 8+anim length : anim data
-
- End Proc
- Procedure INIT_STATUS
- Reserve As Work 2001,100
- Reserve As Work 2002,100
-
- ' 0,1 x,y pos
- ' 2 walking
- ' 3 move #
- ' 4 damage
- ' 5,6 hit x,y
- ' 7 hit
- ' 8 Anim Frame
- ' 9 missed
- ' 10 Jumping
-
- S1=Start(2001)
- S2=Start(2002)
-
- ' Enemy
- Poke S1,200
- Poke S1+1,100
- Poke S1+2,0
- Poke S1+3,0
- Poke S1+4,100
- Poke S1+5,255
- Poke S1+6,255
- Poke S1+7,0
- Poke S1+8,28
- Poke S1+9,0
- Poke S1+10,0
-
- ' Hero
- Poke S2,100
- Poke S2+1,100
- Poke S2+2,0
- Poke S2+3,0
- Poke S2+4,100
- Poke S2+5,255
- Poke S2+6,255
- Poke S2+7,0
- Poke S2+8,28
- Poke S2+9,0
- Poke S2+10,0
- End Proc
- Procedure INIT_SOUNDS
- Load "wolf:sounds.abk",5
- Sam Bank 5
- S_PUNCH=1
- S_KICK=2
- S_KNOCKDOWN=3
- S_2HIT=4
- S_BIG2HIT=5
- S_BIGHIT=6
- S_MISS=7
- SOUNDS=True
- End Proc
- Procedure RENEW_AMREG
- Poke Start(2001)+8,Amreg(0)
- Poke Start(2002)+8,Amreg(1)
- Screen 1
- Locate 1,1
- Cline
- Print Peek(Start(2002)+8)
- Screen 0
- End Proc
- Procedure MAIN
- TWO_PLAYER=True
- INIT
- Repeat
- While Chanan(2) or Chanan(1)
- If Chanan(2)=False Then Proc _CHECK_MAN[2]
- If Chanan(1)=False
- If TWO_PLAYER
- Proc _CHECK_MAN[ENEMY]
- Else
- Proc ENEMY_AI[1]
- End If
- End If
- Proc SOUND[1]
- Proc SOUND[2]
- Proc STICK_CHECK
- Proc RENEW_AMREG
- Proc _DO_SCREEN_UPDATE
- Wend
- Proc _CHECK_MAN[2]
- If TWO_PLAYER
- Proc _CHECK_MAN[1]
- Else
- Proc ENEMY_AI[ENEMY]
- End If
- Proc RENEW_AMREG
- Proc SOUND[1]
- Proc SOUND[2]
- Proc _DO_SCREEN_UPDATE
- Until Left Click : Rem MONKEYS_FLY_OUT_OF_MY_ASS
- PROGRAM_END
- End Proc
- Procedure PROGRAM_END
- ' Erase 1
- ' Erase 2
- ' Erase 6
- ' Multi Yes
- Edit
- End Proc
- Procedure _CHECK_MAN[MAN]
- MOVE=Joy(MAN-1)
- If MOVE=0
- K$=Inkey$
- MOVE=Scancode
- Else
- ' Convert Joystick codes into key codes for use as bank pointers
- If MOVE=4 : MOVE=WALKING_RIGHT : End If
- If MOVE=8 : MOVE=WALKING_LEFT : End If
- If MOVE=2 : Poke Start(2000+MAN),1 : End If
- If MOVE=1 : MOVE=SPIN_KICK : End If
- If MOVE=25 : MOVE=HIGH_KICK : End If
- If MOVE=24 : MOVE=MID_KICK : End If
- If MOVE=26 : MOVE=LOW_KICK : End If
- If MOVE=21 : MOVE=HIGH_PUNCH : End If
- If MOVE=20 : MOVE=MID_PUNCH : End If
- If MOVE=22 : MOVE=LOW_PUNCH : End If
- End If
- LAST_MOVE=Peek(Start(2000+MAN)+3)
- If MOVE<>0 and Chanan(MAN)=False
- ' Determine walking direction and shuffling or walking
- If MOVE=WALKING_LEFT
- If LAST_MOVE=STANDING
- If MAN=1 : MOVE=SHUFFLE_RIGHT : Else :
- MOVE=SHUFFLE_LEFT : End If
- Else
- If MAN=1 : MOVE=WALKING_RIGHT : Else :
- MOVE=WALKING_LEFT : End If
- End If
- If LAST_MOVE=WALKING_LEFT : MOVE=WALKING_LEFT_2 : End
- If
- End If
- If MOVE=WALKING_RIGHT
- If LAST_MOVE=STANDING
- If MAN=1 : MOVE=SHUFFLE_LEFT : Else :
- MOVE=SHUFFLE_RIGHT : End If
- Else
- If MAN=1 : MOVE=WALKING_LEFT : Else :
- MOVE=WALKING_RIGHT : End If
- End If
- If LAST_MOVE=WALKING_RIGHT : MOVE=WALKING_RIGHT_2 :
- End If
- End If
- ' Determine walk punch and walk kick
- If LAST_MOVE=WALKING_LEFT or LAST_MOVE=WALKING_RIGHT
- If MOVE=PUNCH_HIGH : MOVE=WALK_PUNCH_HIGH : End If
- If MOVE=PUNCH_MID : MOVE=WALK_PUNCH_MID : End If
- If MOVE=PUNCH_LOW : MOVE=WALK_PUNCH_LOW : End If
- If MOVE=KICK_HIGH : MOVE=WALK_KICK_HIGH : End If
- If MOVE=KICK_MID : MOVE=WALK_KICK_MID : End If
- If MOVE=KICK_LOW : MOVE=WALK_KICK_LOW : End If
- End If
- End If
- If MAN=2 Then ENEMY_REPORT[MOVE]
- Proc STICK_STRIKE[MAN,MOVE]
- Clear Key
- End Proc
- Procedure _DEBUG
- Screen 1
- Locate 0,1
- Cline 20
- Print "Enemy= ",ENEMY_STATUS$," Hero= ",HERO_STATUS$
- Locate 0,2
- Cline 20
- Print "Dist:";DISTANCE
- Locate 0,4
- Cline 10
- Print "X=";ENEMY_HIT_X;"Y=";ENEMY_HIT_Y
- Screen 0
- End Proc
- Procedure STICK_CHECK
- DISTANCE=X Bob(1)-X Bob(2)
- If Bob Col(1)
- If ENEMY_STATUS$="WALKING" and DISTANCE<5
- STICK_STRIKE[1,ABORT_WALK_LEFT]
- Else
- MOVE=Peek(Start(2001)+3) : Rem find then move the man is in
- L1=Leek(Start(MOVE)+(6*4)) : Rem find the detect frame of that
- move
- L2=Peek(Start(2001)+8) : Rem find the anim frame you are on
- PATTERN_REPORT[L1,L2]
- If L1=L2 : Rem if anim frame = detect frame then
- Proc STICK_HIT[2]
- End If
- End If
- End If
- If Bob Col(2)
- If HERO_STATUS$="WALKING" and DISTANCE<5
- STICK_STRIKE[2,ABORT_WALK_LEFT]
- Else
- MOVE=Peek(Start(2002)+3)
- L1=Leek(Start(MOVE)+(6*4))
- L2=Peek(Start(2002)+8)
- PATTERN_REPORT[L1,L2]
- If L1=L2
- Proc STICK_HIT[1]
- End If
- End If
- End If
- End Proc
- Procedure STICK_HIT[MAN]
- HUE=0
- Screen 2
- If MAN=1 : Rem * The Hero Hits!"
- If HERO_HIT_X=1000 : Screen 0 : Pop Proc : End If
- Bank Swap 8,1
- FRAME=Peek(Start(2001)+8)
- FLIPPED=32
- WHY=26
- Paste Bob X Bob(1)-FLIPPED,Y Bob(1)-WHY,Hrev(FRAME)
- For T=1 To 5
- Screen 2
- If T=1 : HUE=Point(X Bob(2)+HERO_HIT_X,Y Bob(2)+HERO_HIT_Y) :
- End If
- If T=2 : HUE=Point(X Bob(2)+HERO_HIT_X+1,Y
- Bob(2)+HERO_HIT_Y-2) : End If
- If T=3 : HUE=Point(X Bob(2)+HERO_HIT_X+1,Y
- Bob(2)+HERO_HIT_Y+2) : End If
- If T=4 : HUE=Point(X Bob(2)+HERO_HIT_X-1,Y
- Bob(2)+HERO_HIT_Y-1) : End If
- If T=5 : HUE=Point(X Bob(2)+HERO_HIT_X-1,Y
- Bob(2)+HERO_HIT_Y+1) : End If
- If HUE<>0 : DAMAGED[1,HUE] : T=6 : End If
- Next T
- If HUE=0 : Poke Start(2001)+9,1 : End If
- HERO_HIT_X=1000 : HERO_HIT_Y=1000
- Screen 2 : Rem * Dont ask me why I have to do this! AMOS seems to
- forget
- Cls 0 : Rem * that I was already on Screen 2 and clears Screen 0!?
- Bank Swap 1,8
- End If
- If MAN=2 : Rem * The Enemy Strikes!
- If ENEMY_HIT_X=1000 : Screen 0 : Pop Proc : End If
- Bank Swap 8,1
- FRAME=Peek(Start(2002)+8)
- FLIPPED=32
- WHY=26
- Paste Bob X Bob(2)-FLIPPED,Y Bob(2)-WHY,FRAME
- For T=1 To 5
- Screen 2
- If T=1 : HUE=Point(X Bob(1)+ENEMY_HIT_X,Y
- Bob(1)+ENEMY_HIT_Y) : End If
- If T=2 : HUE=Point(X Bob(1)+ENEMY_HIT_X+1,Y
- Bob(1)+ENEMY_HIT_Y-2) : End If
- If T=3 : HUE=Point(X Bob(1)+ENEMY_HIT_X+1,Y
- Bob(1)+ENEMY_HIT_Y+2) : End If
- If T=4 : HUE=Point(X Bob(1)+ENEMY_HIT_X-1,Y
- Bob(1)+ENEMY_HIT_Y-1) : End If
- If T=5 : HUE=Point(X Bob(1)+ENEMY_HIT_X-1,Y
- Bob(1)+ENEMY_HIT_Y+1) : End If
- If HUE<>0 : DAMAGED[2,HUE] : T=6 : End If
- Next T
- If HUE=0 : Poke Start(2002)+9,1 : End If
- ENEMY_HIT_X=1000 : ENEMY_HIT_Y=1000
- Screen 2
- Bank Swap 1,8
- Cls 0
- End If
- Screen 0
- End Proc
- Procedure SOUND[MAN]
- S1=Start(2001)
- S2=Start(2002)
- If MAN=1
- MOVE=Peek(S2+3)
- If MOVE=17 or MOVE=33 or MOVE=50 or MOVE=18 or MOVE=31 or
- MOVE=51
- If Peek(S1+6)>0
- Sam Play S_PUNCH
- Poke S1+6,0
- End If
- If Peek(S1+9)=1
- ' Sam Play S_MISS
- Poke S1+9,0
- End If
- End If
- If MOVE=69 or MOVE=16 or MOVE=32 or MOVE=49 or MOVE=19 or
- MOVE=35 or MOVE=52
- If Peek(S1+6)>0
- Sam Play S_KICK
- Poke S1+6,0
- End If
- If Peek(S1+9)=1
- ' Sam Play S_MISS
- Poke S1+9,0
- End If
- End If
- Else
- MOVE=Peek(S1+3)
- If MOVE=17 or MOVE=33 or MOVE=50 or MOVE=18 or MOVE=31 or
- MOVE=51
- If Peek(S2+6)>0
- Sam Play S_PUNCH
- Poke S2+6,0
- End If
- If Peek(S2+9)=1
- ' Sam Play S_MISS
- End If
- End If
- If MOVE=69 or MOVE=16 or MOVE=32 or MOVE=49 or MOVE=19 or
- MOVE=35 or MOVE=52
- If Peek(S2+6)>0
- Sam Play S_KICK
- Poke S2+6,0
- End If
- If Peek(S2+9)=1
- ' Sam Play S_MISS
- End If
- End If
- End If
- End Proc
- Procedure STICK_STRIKE[MAN,MOVE]
- If MOVE=0 : M=STANDING : OTHER$="STANDING" : End If
- If MOVE=79 : M=WALKING_LEFT : OTHER$="WALKING" : End If
- If MOVE=78 : M=WALKING_RIGHT : OTHER$="WALKING" : End If
- If MOVE=179 : M=WALKING_LEFT_2 : OTHER$="WALKING" : End If
- If MOVE=178 : M=WALKING_RIGHT_2 : OTHER$="WALKING" : End If
- If MOVE=53 : M=BOW : OTHER$="BOW" : End If
- If MOVE=69 Then M=SPIN_KICK
- If MOVE=16 Then M=HIGH_KICK
- If MOVE=32 Then M=MID_KICK
- If MOVE=49 Then M=LOW_KICK
- If MOVE=17 Then M=HIGH_PUNCH
- If MOVE=33 Then M=MID_PUNCH
- If MOVE=50 Then M=LOW_PUNCH
- If MOVE=100 : OTHER$="HURT" : M=HURT : End If
- If MOVE=102 : M=SHUFFLE_LEFT : OTHER$="WALKING" : End If
- If MOVE=103 : M=SHUFFLE_RIGHT : OTHER$="WALKING" : End If
- If MOVE=104 : M=ABORT_WALK_LEFT : OTHER$="WALKING" : End If
- If MOVE=105 : M=ABORT_WALK_RIGHT : OTHER$="WALKING" : End If
-
- If MOVE=106 Then M=DEAD
- If MOVE=56 : M=STILL_WALKING_LEFT : OTHER$="WALKING" : End If
- If MOVE=57 : M=STILL_WALKING_RIGHT : OTHER$="WALKING" : End If
-
- If MOVE=18 Then M=WALK_PUNCH_HIGH
- If MOVE=34 Then M=WALK_PUNCH_MID
- If MOVE=51 Then M=WALK_PUNCH_LOW
- If MOVE=19 Then M=WALK_KICK_HIGH
- If MOVE=35 Then M=WALK_KICK_MID
- If MOVE=52 Then M=WALK_KICK_LOW
- If MOVE=68 Then M=BLOCK
- If M=0 Then M=STANDING
-
- ' Preceding section exists almost solely to prevent errant keypresses
- ' from crashing the program. Idealy MOVE would just be passed the
- Go_Anim
-
- If M<>STANDING and M<>0
- S=Start(MAN+1000)
- If COUNT>1999 : COUNT=0 : End If
- Inc COUNT
- Poke S+COUNT,M
- End If
-
- S=Start(M)
- If MAN=2
- If Leek(Start(1001)+(6*4))=46
- HERO_HIT_X=1000
- HERO_HIT_Y=1000
- Else
- HERO_HIT_X=Leek(S+(1*4))
- HERO_HIT_Y=Leek(S+(2*4))
- End If
- If OTHER$=""
- HERO_STATUS$="STRIKE"
- Else
- HERO_STATUS$=OTHER$
- End If
- Else
- If Leek(Start(1002)+(6*4))=46
- ENEMY_HIT_X=1000
- ENEMY_HIT_Y=1000
- Else
- ENEMY_HIT_X=Leek(S+(3*4))
- ENEMY_HIT_Y=Leek(S+(4*4))
- End If
- If OTHER$=""
- ENEMY_STATUS$="STRIKE"
- Else
- ENEMY_STATUS$=OTHER$
- End If
- End If
- S=Start(2000+MAN)
- Poke S+3,M
- Proc GO_ANIM[MAN,M]
- End Proc
- Procedure ENEMY_AI[MAN]
- DISTANCE=X Bob(1)-X Bob(2)
- DIST=Abs(DISTANCE)
- If DIST<120 and DIST>=30 and DISTANCE>0 Then
- MOVE=WALKING_RIGHT
- If DIST<30 and A=0
- A=Rnd(4)+1
- B=0
- End If
- If DIST<30 and A<>0 and Chanan(1)=0
- B=Range(B+1,1 To 5)
- If PATTERN$(A,B)="ks" : MOVE=SPIN_KICK : End If
- If PATTERN$(A,B)="kl" : MOVE=LOW_KICK : End If
- If PATTERN$(A,B)="km" : MOVE=MID_KICK : End If
- If PATTERN$(A,B)="kh" : MOVE=HIGH_KICK : End If
- If PATTERN$(A,B)="pl" : MOVE=LOW_PUNCH : End If
- If PATTERN$(A,B)="pm" : MOVE=MID_PUNCH : End If
- If PATTERN$(A,B)="ph" : MOVE=HIGH_PUNCH : End If
- If PATTERN$(A,B)="sl" : MOVE=SHUFFLE_LEFT : End If
- If PATTERN$(A,B)="sr" : MOVE=SHUFFLE_RIGHT : End If
- If PATTERN$(A,B)="ee" : A=0 : End If
- End If
- If Chanan(1)=False Then STICK_STRIKE[1,MOVE]
- End Proc
- Procedure PATTERN_REPORT[A1,B1]
- Screen 1
- Locate 15,3
- Cline 15
- Print "Pattern:",A1,B1
- Screen 0
- End Proc
- Procedure ENEMY_REPORT[MOVE]
- Screen 1
- Locate 0,0
- Cline 5
- Print MOVE
- Screen 0
- End Proc
- Procedure STATS
- HERO_HEALTH=100
- ENEMY_HEALTH=100
- End Proc
- Procedure REPORT_STATS
- Screen 1
- Locate 0,3
- Cline 15
- Print HERO_HEALTH,ENEMY_HEALTH;
- Screen 0
- End Proc
- Procedure GOTCHA[MAN]
- Screen 0
- If MAN=2
- Channel 3 To Bob 3
- Bob 3,X Bob(1)+ENEMY_HIT_X,Y Bob(1)+ENEMY_HIT_Y,48
- A$="Anim 1,(48,20)"
- Amal 3,A$
- Amal On 3
- Else
- Channel 4 To Bob 4
- Bob 4,X Bob(2)+HERO_HIT_X,Y Bob(2)+HERO_HIT_Y,49
- A$="Anim 1,(49,20)"
- Amal 4,A$
- Amal On 4
- End If
- End Proc
- Procedure DAMAGED[MAN,LOCATION]
- If LOCATION=1 Then OUCH=Rnd(10)+10
- If LOCATION=2 Then OUCH=Rnd(10)+5
- If LOCATION=3 Then OUCH=1
- If LOCATION=4 Then OUCH=Rnd(10)+8
- If LOCATION=5 Then OUCH=Rnd(5)+2
- If LOCATION>5 Then OUCH=Rnd(10)+2
- S=Start(HURT)
- BOOY=Range(OUCH,10 To 20)
- Loke S+7,BOOY
- Poke Start(2000+MAN)+6,1
- Proc STICK_STRIKE[MAN,HURT]
- If MAN=2 Then Add HERO_HEALTH,-OUCH
- If MAN=1 Then Add ENEMY_HEALTH,-OUCH
- Proc REPORT_STATS
- If HERO_HEALTH<=0 Then Proc DIE[2]
- If ENEMY_HEALTH<=0 Then Proc DIE[1]
- Poke Start(2002)+4,HERO_HEALTH
- Poke Start(2001)+4,ENEMY_HEALTH
- End Proc
- Procedure DIE[MAN]
- Bank Swap 8,1
- If MAN=2 Then QUOTE$="Our Hero is Vanguished"
- If MAN=1 Then QUOTE$="Our Hero Wins!"
- STICK_STRIKE[MAN,DEAD]
- Sam Play S_KNOCKDOWN
- Screen 1
- Locate 0,4
- Cline
- Print QUOTE$;
- Screen 0
- While Chanan(1) or Chanan(2)
- _DO_SCREEN_UPDATE
- Wend
- Wait Key
- PROGRAM_END
- End Proc
- Procedure GO_ANIM[MAN,MOVE]
- Channel MAN To Bob MAN
- If MAN=1 Then F$="$8000+" Else F$=""
- A$="Anim 1,"
- S=Start(MOVE)
- S$=Str$(Leek(S+(7*4)))
- For T=(8*4) To(8*4)+(Leek(S)-1)*4 Step 4
- A$=A$+"("+F$+Str$(Leek(S+T))+","+S$+")"
- Next T
- If Leek(S+(5*4))=0
- F$=Str$(Leek(S+(Leek(S)+(8+(MAN*2)-2))*4))
- G$=Str$(Leek(S+(Leek(S)+(9+(MAN*2)-2))*4))
- A$=A$+"; M "+F$+",0,"+G$
- End If
- If Peek(Start(2000+MAN)+10)=1
- If MAN=1 : A$=A$+"; M -8,-15,10; M -8,15,10" : End If
- If MAN=2 : A$=A$+"; M 8,-15,10; M 8,15,10" : End If
- End If
- If MAN=1 Then A$=A$+"; K: Let RA=A Jump K" Else A$=A$+";K: Let
- RB=A Jump K"
- Amal MAN,A$
- Amal On MAN
- End Proc
- Procedure CAPTURE_ANIM[FILENAME$]
- Screen Open 0,320,200,64,Lowres
- F$="dh2:amos_pro/wolf/pictures/"
- Open In 1,F$+FILENAME$
- MEMORY=Frame Length(1,999)
- NOF=Frame Load(1 To 10,999)
- Close 1
- FLAG=Frame Play(10,1,0)
- Double Buffer
- For T=2 To NOF
- FLAG=Frame Play(FLAG,1)
- Screen Swap
- Wait Frame Param+1
- Get Bob 0,T-1,145,63 To 206,116
- Next T
- End
- End Proc
- Procedure _DO_SCREEN_UPDATE
- Bob Draw
- Screen Swap
- Wait Vbl
- Bob Clear
- End Proc
-
- HELL:
-
- Dim X(2),Y(2),LOCATION$(5),AREA_X(12),AREA_Y(12),PATTERN$(6,6)
-
- Global PATTERN$(),A,B,DISTANCE
- Global X(),Y(),F$,LOCATION$(),AREA_X(),AREA_Y()
- Global IMAGE,X_OFFSET,LIVES1,LIVES2,WALKING
- Global ENEMY,PUNCH_COUNTER,KICK_COUNTER,SHUFFLE_COUNTER
- Global ENEMY_HEALTH,HERO_HEALTH,HERO_MOVES,ENEMY_MOVES
- Global HERO_STATUS$,ENEMY_STATUS$,ENEMY_HIT_X,ENEMY_HIT_Y
- Global HERO_HIT_X,HERO_HIT_Y,HERO,ENEMY,S,COUNT
-
- Global
- SPIN_KICK,HIGH_KICK,MID_KICK,LOW_KICK,HIGH_PUNCH,MID_PUNCH,LOW_PUNCH
- Global
- BOW,STANDING,HURT,WALKING_LEFT,WALKING_RIGHT,SHUFFLE_LEFT,SHUFFLE_RIGHT
- Global
- DEAD,ABORT_WALK_LEFT,ABORT_WALK_RIGHT,STILL_WALKING_LEFT
- Global
- STILL_WALKING_RIGHT,WALK_PUNCH_HIGH,WALK_PUNCH_MID,WALK_PUNCH_LOW
- Global
- WALK_KICK_HIGH,WALK_KICK_MID,WALK_KICK_LOW,FOOT_SWEEP,BLOCK
- Global WALKING_LEFT_2,WALKING_RIGHT_2,JUMP
-
- Global
- SOUNDS,S_PUNCH,S_KICK,S_KNOCKDOWN,S_2HIT,S_BIG2HIT,S_BIGHIT,S_MISS
- Global S_COUNT
-
- 'Proc CAPTURE_ANIM["detect.anim"]
- Proc MAIN
-
-
-
-